﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Qing.Test {
    public class TestScript {
        public static string Script = @"

@显示、“************开始进行内置测试************”
@显示、“”

；求1000以内的素数
@显示、“求1000以内的素数”
#集合 = 【】
当 #甲：1，#甲 小于等于 1000， #甲 加等 1 ｛
    
    #是素数 = 真
    当 #乙：2， #乙 小于等于 #甲 除以 2， #乙 加等 1 ｛
        
        如果 #甲 % #乙 等于 0 ｛
            #是素数 = 假
            跳出
        ｝
    ｝

    如果 #是素数 ｛
        @追加【#集合，#甲】
    ｝
｝

@显示、#集合
@显示、“1000以内的素数的个数为” + @取长度、#集合


；打印三角形
@显示、“\n**************************”
@打印三角 = @【#行】｛
    #列 = #行*2-1
     当 #甲：1，#甲 小于等于 #行，#甲 加等 1 ｛
        #输出： “”
        当 @取长度【#输出】 小于 #列 ｛
            如果 @取长度【#输出】 小于 #甲*2-1 ｛
                #输出 = #输出 + “*” 
            ｝ 否则 ｛
                #输出 = “ ” + #输出 + “ ” 
            ｝
        ｝ 
        @显示、#输出
    ｝
｝
@显示、“打印三角形”
@打印三角、10


；斐波那契数列
@显示、“\n**************************”
@斐波那契=@【#某】｛
    如果 #某 小于 2 ｛
        #某
    ｝否则 ｛
        @斐波那契【#某-1】+@斐波那契【#某-2】
    ｝
｝

@显示、“求斐波那契数列第25位”
#某 = @斐波那契、25
@显示、“斐波那契数列第25位为”+ #某


；回文函数
@显示、“\n**************************”
@求回文 = @【#文本】｛
    #结果： “”
    #序： @取长度【#文本】-1
    当 #序 大于等于 0 ｛
        #结果 = @追加【#结果， @取出【#文本， #序】】
        #序 减等 1
    ｝
    返回 #结果
｝
@显示、“求回文函数，输入abcdefg”
@显示、“输出为 ” + @求回文、“abcdefg”


；爬楼梯
@显示、“\n**************************”
@显示、“爬n层楼梯，每次可以爬1级或2级，共几种可能，输入22”
@爬楼梯可能 = @【#层】｛
    #可能 = 1
    #数 = 1
    当 #数 小于等于 #层 除以 2 ｛
        #可能 加等 （#层 - #数）
        #数 加等 1
    ｝
    返回 #可能
｝
@显示、“共有” + @爬楼梯可能、22


；最大公共前缀
@显示、“\n**************************”
@求最大公共前缀 = @【#集】｛
    #长度 ： @取长度、#集
    如果 #长度 等于 0 ｛
        返回 “”
    ｝再则 #长度 等于 1 ｛
        返回 #集#0
    ｝否则 ｛
        #最小长度 ： 999999999
        遍历 #集 为 #项 ｛           
            如果 @取长度【#项】 小于 #最小长度  ｛ #最小长度 = @取长度、#项｝
        ｝
        #序：0
        当 #序 小于 #最小长度｛
            #匹配：真
            #字：#集#0#序
            当 #号：1，#号 小于 @取长度、#集，#号 加等 1 ｛
                如果 #字 不等于 #集#号#序 ｛
                    #匹配 = 假
                    跳出
                ｝
            ｝
            如果 #匹配 等于 假 ｛跳出｝
            #序 加等 1
        ｝
        如果 #序 等于 0 ｛
            返回 “”
        ｝否则 ｛
            返回 @取出【#集#0， 0， #序】
        ｝
    ｝
｝

@显示、“求多个字符串的公共前缀，输入：abc123、abc456、abc789”
@显示、“输出：” + @求最大公共前缀、【“abc123”，“abc456”，“abc789”】


；数组去重
@显示、“\n**************************”
@显示、“去除数组中重复的元素，输入【2，4，2，5，6，5，3，5，7，6，3，8，2，3，5】”
@去重 = @【#集】｛
    #序：0
    当 #序 小于 @取长度、#集 ｛
        #号：#序 + 1
        当 #号 小于 @取长度、#集 ｛
            如果 #集#序 等于 #集#号 ｛
                @取出【#集，#号】
            ｝否则｛
                #号 加等 1
            ｝
        ｝
        #序 加等 1
    ｝
    返回 #集
｝
@显示、“去重后的数组为：” + @去重、【2，4，2，5，6，5，3，5，7，6，3，8，2，3，5】

；并行测试
@显示、“\n**************************”
@显示、“开启3个任务分别求斐波那契数列第30位，并等待所有任务结束”
@并行【【元｛@显示、@斐波那契、30｝，元｛@显示、@斐波那契、30｝，元｛@显示、@斐波那契、30｝】，真】
@显示、“并行测试完成”

@显示、“”
@显示、“**************内置测试完成**************”


";


    }
}
